.TH std::as_bytes,std::as_writable_bytes 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::as_bytes,std::as_writable_bytes \- std::as_bytes,std::as_writable_bytes

.SH Synopsis
   Defined in header <span>
   template< class T, std::size_t N >

   std::span<const std::byte, S/* see below */>         \fB(1)\fP \fI(since C++20)\fP

       as_bytes( std::span<T, N> s ) noexcept;
   template< class T, std::size_t N >

   std::span<std::byte, S/* see below */>               \fB(2)\fP \fI(since C++20)\fP

       as_writable_bytes( std::span<T, N> s ) noexcept;

   Obtains a view to the object representation of the elements of the span s.

   If N is std::dynamic_extent, the extent of the returned span S is also
   std::dynamic_extent; otherwise it is sizeof(T) * N.

   as_writable_bytes only participates in overload resolution if std::is_const_v<T> is
   false.

.SH Return value

   1) A span constructed with {reinterpret_cast<const std::byte*>(s.data()),
   s.size_bytes()}.
   2) A span constructed with {reinterpret_cast<std::byte*>(s.data()), s.size_bytes()}.

.SH Example


// Run this code

 #include <cstddef>
 #include <iomanip>
 #include <iostream>
 #include <span>

 void print(float const x, std::span<const std::byte> const bytes)
 {
     std::cout << std::setprecision(6) << std::setw(8) << x << " = { "
               << std::hex << std::uppercase << std::setfill('0');
     for (auto const b : bytes)
         std::cout << std::setw(2) << std::to_integer<int>(b) << ' ';
     std::cout << std::dec << "}\\n";
 }

 int main()
 {
     /* mutable */ float data[1]{3.141592f};

     auto const const_bytes = std::as_bytes(std::span{data});

     print(data[0], const_bytes);

     auto const writable_bytes = std::as_writable_bytes(std::span{data});

     // Change the sign bit that is the MSB (IEEE 754 Floating-Point Standard).
     writable_bytes[3] |= std::byte{0B1000'0000};

     print(data[0], const_bytes);
 }

.SH Possible output:

  3.14159 = { D8 0F 49 40 }
 -3.14159 = { D8 0F 49 C0 }

.SH See also

   start_lifetime_as       implicitly creates objects in given storage with the object
   start_lifetime_as_array representation reused
   (C++23)                 \fI(function template)\fP
   byte                    the byte type
   \fI(C++17)\fP                 \fI(enum)\fP
